import request from "@/utils/axios";

// 封禁类型枚举
export enum BlockType {
  ACCOUNT = 1, // 账号封禁
  DEVICE = 2, // 设备封禁
  IP = 3, // IP封禁
  LOGIN_LIMIT = 4, // 限制登录类型
}

// 封禁类型文本映射
export const BlockTypeText = {
  [BlockType.ACCOUNT]: "账号封禁",
  [BlockType.DEVICE]: "设备封禁",
  [BlockType.IP]: "IP封禁",
  [BlockType.LOGIN_LIMIT]: "限制登录类型",
} as const;

// 封禁类型样式映射
export const BlockTypeType = {
  [BlockType.ACCOUNT]: "danger",
  [BlockType.DEVICE]: "warning",
  [BlockType.IP]: "info",
  [BlockType.LOGIN_LIMIT]: "warning",
} as const;

// 封禁原因分类映射
export const ReasonCategoryText = {
  porn: "色情内容",
  violence: "暴力内容",
  spam: "垃圾信息",
  fraud: "诈骗行为",
  other: "其他违规",
} as const;

// 封禁状态枚举
export enum BlockStatus {
  YES = 1, // 是
  NO = 2, // 否
}

// 封禁状态文本映射
export const ReportStatusText = {
  0: "待处理",
  1: "已处理",
  2: "忽略",
} as const;

// 举报来源
export enum ReportSource {
  USER_INFO = "USER_INFO", // 用户信息
  LIVE_ROOM = "LIVE_ROOM", // 直播房间
  PUBLIC_NOTICE = "PUBLIC_NOTICE", // 公共通知
  GROUP_CHAT = "GROUP_CHAT", // 群聊
  SINGLE_CHAT = "SINGLE_CHAT", // 单聊
}

// 举报来源文本映射
export const ReportSourceText = {
  [ReportSource.USER_INFO]: "用户信息",
  [ReportSource.LIVE_ROOM]: "直播房间",
  [ReportSource.PUBLIC_NOTICE]: "公共通知",
  [ReportSource.GROUP_CHAT]: "群聊",
  [ReportSource.SINGLE_CHAT]: "单聊",
} as const;

// 封禁状态样式映射
export const BlockStatusType = {
  [BlockStatus.YES]: "danger",
  [BlockStatus.NO]: "info",
} as const;

// 封禁状态样式映射
export const ReportStatusType = {
  0: "danger",
  1: "info",
  2: "primary",
} as const;

// 搜索请求参数
export interface ReportSearchReq {
  reporterUserNo?: string; // 举报者用户编号
  reporteeNo?: string; // 被举报者编号
  category?: string; // 分类
  status?: string; // 状态【0：待处理，1：已处理，2：忽略】
  source?: string; // 举报信息类型，枚举【user：用户，room：房间】
  startTime?: string; // 开始时间（UTC+0格式）
  endTime?: string; // 结束时间（UTC+0格式）
  pageIndex: number; // 页码
  pageSize: number; // 每页大小
}

// 分页响应数据
export interface ReportPageRes {
  hasNextPage: boolean;
  list: ReportRecordDto[];
  nextPage: number;
  count: number;
  total: number;
  size: number;
}

// 封禁记录数据
export interface ReportRecordDto {
  reportId?: string; // 记录Id
  reporterUserNo?: string; // 举报者用户编号
  reporterUserAvatar?: string; // 举报者用户头像
  reporterUserNickname?: string; // 举报者用户名
  reporterCountryCode?: string; // 举报者国家码
  reporteeNo?: string; // 被举报者编号
  reporteeAvatar?: string; // 被举报者头像
  reporteeName?: string; // 被举报者名称
  reporteeCountryCode?: string; // 被举报者国家码
  category?: string; // 分类
  status?: 0 | 1 | 2; // 状态【0：待处理，1：已处理，2：忽略】
  source?:
    | "USER_INFO"
    | "LIVE_ROOM"
    | "PUBLIC_NOTICE"
    | "GROUP_CHAT"
    | "SINGLE_CHAT"; // 举报来源
  description?: string; // 描述
  reportTime?: object; // 举报时间开始时间
  handledTime?: object; // 处理时间
  handlerUsername?: string; // 处理人名称
}

// 添加封禁请求参数
export interface BlockAddReq {
  userId: string; // 用户Id
  content: string; // 封禁uid传uid，封禁设备传设备号，封禁ip传ip
  type?: number; // 封禁类型
  reasonCategory: string; // 封禁原因，porn,harassment 请参考 ViolationCategoryEnum
  remark?: string; // 备注
  durationOfSeconds: number; // 封禁的时长（秒）
}

// API接口定义
const Api = {
  ReportPage: "/report/page",
  ReportIgnore: "/report/ignore/:id",
  ReportPunishLock: "/report/punish/:id",
} as const;

// 获取封禁记录分页列表
export const getReportPageApi = (data: ReportSearchReq) => {
  return request.post<ReportPageRes>(Api.ReportPage, data);
};

// 忽略举报
export const ignoreReportApi = (id: string) => {
  return request.post<ReportPageRes>(Api.ReportIgnore.replace(":id", id));
};
// 惩罚锁定
export const punishLockReportApi = (id: string,params) => {
  return request.post<ReportPageRes>(Api.ReportPunishLock.replace(":id", id),params);
};
